#include <bits/stdc++.h>
using namespace std;
int n;
int m;
int L;
int V;
struct Node
{
    int d;
    int v;
    int a;
}b[100005];
int p[100005];
int t;
int cnt;
int len;
vector<int> q[3005];
bool f[3005];
bool cmp(int x,int y)
{
    return x>y;
}
void zheng(int d,int v,int a)
{
    int s=(V*V-v*v)/(2*a);
    int e=d+s;
    bool flag=true;
    for(int i=m;i>=1;i--)
    {
        if(p[i]>=e)
        {
            if(flag)
            {
                len++;
                cnt++;
                flag=false;
            }
            q[len].push_back(p[i]);
        }
        else
        {
            return ;
        }
    }
    return ;
}
void fushu(int d,int v,int a)
{
    int s=(V*V-v*v)/(2*a);
    bool flag=true;
    //cout<<d+s<<endl;
    for(int i=1;i<=m;i++)
    {
        if(p[i]>=d&&p[i]<=d+s)
        {
            if(flag)
            {
                len++;
                cnt++;
                flag=false;
            }
            q[len].push_back(p[i]);
        }
    }
    return ;
}
int main()
{
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    cin>>t;
    for(int i=1;i<=t;i++)
    {
        cin>>n>>m>>L>>V;
        cnt=0;
        len=0;
        for(int i=1;i<=n;i++)
        {
            cin>>b[i].d>>b[i].v>>b[i].a;
        }
        for(int i=1;i<=m;i++)
        {
            cin>>p[i];
        }
        for(int i=1;i<=n;i++)
        {
            if(b[i].a>0)
            {
                zheng(b[i].d,b[i].v,b[i].a);
            }
            else if(b[i].a<0)
            {
                fushu(b[i].d,b[i].v,b[i].a);
            }
            else
            {
                if(b[i].v>V)
                {
                    bool flag=true;
                    for(int j=m;j>=1;j--)
                    {
                        if(p[j]>=b[i].d)
                        {
                            if(flag)
                            {
                                len++;
                                cnt++;

                                flag=false;
                            }
                            q[len].push_back(p[j]);
                        }
                        else{
                            break;
                        }
                    }
                }
            }
        }
        if(b[i].v>=0)
        {
            if(cnt==0)
            {
                cout<<0<<" "<<m<<endl;
                continue;
            }
            cout<<cnt<<" "<<m-1<<endl;
        }
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}
